
from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.orm import mapper
from database import metadata, db_session, init_db, engine
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from usuario import Usuario, usuario
from estadoItem import EstadoItem, estadoItem
from tipoItem import TipoItem, tipoitem
from estadoProyecto import EstadoProyecto, estadoproyecto
from proyecto import Proyecto, proyecto
from fase import Fase, fase
from sqlalchemy.types import Date, DateTime
import datetime
from tipoRelacion import TipoRelacion, tiporelacion
from lineaBase import lineaBase, LineaBase

class Item(object):
    """ Clase que define el modelo de la tabla item """
    
    def __init__(self, nombre=None, costo=None, complejidad=None, fechaInicio=None, 
                 fechaFin=None, duracion=None, version=None, numeroItem=None, creador=None, fechaUltimaMod=None, usuarioUltimaMod=None):
        """ Metodo init """
        self.nombre = nombre
        self.costo = costo
        self.complejidad = complejidad
        self.fechainicio = fechaInicio
        self.fechafin = fechaFin
        self.duracion = duracion
        self.version = version
        self.numeroitem = numeroItem
        self.creador = creador
        self.fechaultimamod = fechaUltimaMod
        self.usuarioUltimaMod = usuarioUltimaMod

    def __repr__(self):
        return self.nombre

item = Table('item', metadata,
    Column('iditem', Integer, primary_key=True),
    Column('nombre', String(50)),
    Column('costo', Integer),
    Column('complejidad', Integer),
    Column('fechainicio', Date, default = datetime.date),
    Column('fechafin', Date, default = datetime.date),
    Column('duracion', Integer),
    Column('version', String(50)),
    Column('numeroitem', String(10)),
    Column('idcreador', Integer, ForeignKey('usuario.idusuario')),
    Column('fechaultimamod', Date, default = datetime.date),
    Column('idusuarioultimamod', Integer, ForeignKey('usuario.idusuario')),
    Column('idestadoitem',Integer, ForeignKey('estadoitem.idestadoitem')),
    Column('idtipoitem',Integer, ForeignKey('tipoitem.idtipoitem')),
    Column('idfase',Integer, ForeignKey('fase.idfase')),
    Column('idlineabase',Integer, ForeignKey('lineabase.idlineabase')),
    Column('idusuariohabilitado',Integer, ForeignKey('usuario.idusuario'))
)


mapper(Item, item, properties={
     'estadoItem' : relationship(EstadoItem, backref='items'),
     'fase' : relationship(Fase, backref='items'),
     'tipoItem' : relationship(TipoItem, backref='items'),
     'lineaBase' : relationship(LineaBase, backref='items'),
     'creador' : relationship(Usuario, backref='itemsCreador', primaryjoin= (Usuario.idusuario == item.c.idcreador)),
     'usuarioUltimaMod' : relationship(Usuario, backref='itemsUltimaMod', primaryjoin= (Usuario.idusuario == item.c.idusuarioultimamod)),
     'usuarioHabilitado' : relationship(Usuario, backref='itemsHabilitados', primaryjoin= (Usuario.idusuario == item.c.idusuariohabilitado))
})
